package com.yourenbang.lingyun.transaction.web.service.fund;

import com.yourenbang.lingyun.constants.enums.mq.transaction.ChangeFundDTO;
import com.yourenbang.lingyun.core.message.Result;
import com.yourenbang.lingyun.core.model.vo.PageVO;
import com.yourenbang.lingyun.transaction.web.domain.dto.ChangeFundAccountV2DTO;
import com.yourenbang.lingyun.transaction.web.domain.dto.fund.IncomeStatisticsDetailRequest;
import com.yourenbang.lingyun.transaction.web.domain.dto.fund.IncomeStatisticsDetailResponse;
import com.yourenbang.lingyun.transaction.web.domain.dto.fund.IncomeStatisticsTotalRequest;
import com.yourenbang.lingyun.transaction.web.domain.dto.fund.IncomeStatisticsTotalResponse;
import com.yourenbang.transaction.api.model.dto.manage.TopupSysAccountDTO;
import com.yourenbang.transaction.api.model.vo.FundPayBusVO;

/**
 * 资金加减帐
 * 2023/4/25之前 盟友资金账户分为5个
 * 2023/4/25    对盟友资金账户5个进行合并
 */
public interface FundService {

    /**
     * 凌云资金账户加账
     */
    @Deprecated
    Result addFund(String param);

    @Deprecated
    Result addFund(ChangeFundDTO changeFundDTO);

    /**
     * 加帐,针对管理后台给系统资金账号使用
     *
     * @param topupSysAccountDTO
     * @return
     */
    Result add(TopupSysAccountDTO topupSysAccountDTO);

    /**
     * 凌云资金账户加账
     */
    Result add(String param);

    /**
     * 加帐
     *
     * @param changeFundDTO
     * @return
     */
    Result add(ChangeFundDTO changeFundDTO);

    /**
     * 加帐
     *
     * @param changeFundAccountV2DTO
     * @return
     */
    Result add(ChangeFundAccountV2DTO changeFundAccountV2DTO);

    /**
     * 提现减帐,由可提金额转移至已提金额
     */
    @Deprecated
    Result subtractFund(String param);

    @Deprecated
    Result subtractFund(ChangeFundDTO changeFundDTO);


    /**
     * 提现减帐,由可提金额转移至已提金额
     * @param param
     * @return
     */
    Result subtract(String param);

    /**
     * 提现减帐,由可提金额转移至已提金额
     *
     * @param changeFundDTO
     * @return
     */
    Result subtract(ChangeFundDTO changeFundDTO);


    /**
     * 提现减帐,由可提金额转移至已提金额,需区别 {@link FundService#reversal(ChangeFundAccountV2DTO)}
     *
     * @param changeFundAccountV2DTO
     * @return
     */
    Result subtract(ChangeFundAccountV2DTO changeFundAccountV2DTO);


    /**
     * 加帐冲正,将可提资金退还给打款方,需区别 {@link FundService#subtract(ChangeFundAccountV2DTO)}
     *
     * @param changeFundAccountV2DTO
     * @return
     */
    Result reversal(ChangeFundAccountV2DTO changeFundAccountV2DTO);

    /**
     * 冻结金额,等待解冻
     *
     * @return
     */
    Result<FundPayBusVO> deposit(ChangeFundAccountV2DTO changeFundAccountV2DTO);

    /**
     * 根据订单号取消资金变动计划
     *
     * @param orderNo
     * @return
     */
    Result cancelByOrderNo(String orderNo);

    /**
     * 取消冻结,将冻结金额退回原账户
     *
     * @return
     */
    Result cancelByFundAccountWithdrawPaymentId(Integer fundAccountWithdrawPaymentId, Short platNo);

    /**
     * 取消冻结,将冻结金额退还原账户
     *
     * @return
     */
    Result cancelByFundAccountChangePlanId(Integer fundAccountChangePlanId, Short platNo);

    /**
     * 对冻结资金解冻至已提金额
     */
    Result undepositByFundAccountWithdrawPaymentId(Integer fundAccountWithdrawPaymentId, Short platNo);

    /**
     * 冻结资金解冻至已提金额
     */
    Result undepositByFundAccountChangePlanId(Integer fundAccountChangePlanId, Short platNo);

    /**
     * 收益统计（按月按天）
     */
    Result<IncomeStatisticsTotalResponse> statisticsTotal(IncomeStatisticsTotalRequest data);

    /**
     * 收益统计明细
     */
    Result<PageVO> statisticsDetail(IncomeStatisticsDetailRequest data);
}
